home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / qbprog.EXE / SIRALA.TXT < prev    next >
Text File  |  1980-01-06  |  18KB  |  331 lines

  1.   ┌──────────────────────────────────────────────────────────────────────────┐
  2.   │┌────────────────────────────────────────────────────────────────────────┐│
  3.   ││                                                                        ││
  4.   ││          QuickBasic'de karƒìlaƒtìºìm sorunlarì nasìl aƒtìm?            ││
  5.   ││                                                                        ││
  6.   ││                          Minik bazì sorunlar                           ││
  7.   │└────────────────────────────────────────────────────────────────────────┘│
  8.   │ PS 31 · ₧ubat'96                                      Gürol Demir        │
  9.   └──────────────────────────────────────────────────────────────────────────┘
  10.  
  11.           Bu ay basic dilinde minik bazì sorunlarìn halli üzerinde duralìm.
  12.           
  13.           Konumuz alt baƒlìklarì ƒöyle:
  14.  
  15.                 a) Sìralama algoritmasì
  16.                 b) Türkçe heceleme
  17.                 c) Binary dosya yapìsì
  18.                 d) Hscplayer'in basic'e monte edilmesi
  19.  
  20.          ┌────────────────────────┐
  21. ─────────┤  Sìralama algoritmasì  │
  22.          └────────────────────────┘
  23.  
  24.           Sanìrìm yaptìºìnìz programlarda zaman zaman verilerinizi sìraya 
  25. sokma ihtiyacì duydunuz. Bunun için kliƒeleƒmiƒ bir yöntem vardìr. Klasik
  26. olan bu yöntemin algoritmasì ƒöyledir.
  27.  
  28. (Amaç verilerin büyükten küçüºe doºru sìralanmasì)
  29. 1 - Sayac1'i sìfìrla
  30. 2 - Sayac1'i bir arttìr  
  31. 3 - Sayac1 toplam veri adedini geçti mi?
  32.     a) Evet : programì bitir.(10'na git)
  33.     b) Hayìr: devam et
  34. 4 - Sayac1 ile tanìmlanan veriyi al
  35. 5 - Sayac2'yi sìfìrla
  36. 6 - Sayac2'yi bir arttìr  
  37. 7 - Sayac1 toplam veri adedini geçti mi?
  38.     a) Evet : 2'ye git
  39.     b) Hayìr: devam et
  40. 8 - Sayac2 ile tanìmlanan veriyi al
  41. 9 - Sayac1 ve Sayac2 ile ƒaretlenen iki veriyi kìyasla
  42.     a) Eƒit : 6'ya git 
  43.     b) Sayac1 ile ƒaretli veri daha büyük : 6'ya git
  44.     c) Sayac2 ile ƒaretli veri daha büyük : Verileri deºiƒtir ve 6'ya git
  45. 10 - Bitiƒ
  46.  
  47. (Amaç verilerin küçükten büyüºe doºru sìralanmasì)
  48. 1 - Sayac1'i sìfìrla
  49. 2 - Sayac1'i bir arttìr  
  50. 3 - Sayac1 toplam veri adedini geçti mi?
  51.     a) Evet : programì bitir.(10'na git)
  52.     b) Hayìr: devam et
  53. 4 - Sayac1 ile tanìmlanan veriyi al
  54. 5 - Sayac2'yi sìfìrla
  55. 6 - Sayac2'yi bir arttìr  
  56. 7 - Sayac1 toplam veri adedini geçti mi?
  57.     a) Evet : 2'ye git
  58.     b) Hayìr: devam et
  59. 8 - Sayac2 ile tanìmlanan veriyi al
  60. 9 - Sayac1 ve Sayac2 ile ƒaretlenen iki veriyi kìyasla
  61.     a) Eƒit : 6'ya git 
  62.     b) Sayac1 ile ƒaretli veri daha küçük : 6'ya git
  63.     c) Sayac2 ile ƒaretli veri daha küçük : Verileri deºiƒtir ve 6'ya git
  64. 10 - Bitiƒ
  65.  
  66.  
  67.           Rakamsal verilerde ve standart metin dosyalarìnda geçerli bu yöntem 
  68. türkçe karakter bulunan stringlerde iƒe yaramaz. Örneºin "Ç" harfi bu usulde
  69. "Z" den sonra gelir. 
  70.  
  71.           Aƒaºìda verilen modül ise Türkçe verileri düzgün bir sìraya sokar.
  72.  
  73.   ┌───────────────────────────────────────────────────────────────────┐
  74.   │ 'Bu program türke karakterlerin yer aldìºì stringleri sìralar     │
  75.   │                                                                   │
  76.   │'============================= Tanìmlar ========================== │
  77.   │ Enson = 5     'Toplam veri sayìsì                                 │
  78.   │ Nerden = 1    'Kaçìncì karakter baz alìnacak                      │
  79.   │ Uzunluk = 50  'En uzun verinin boyu                               │
  80.   │ Tercih = 1    'Küçükten büyüºe ters sìralama                      │
  81.   │              '1 den farklì ise düz sìralama yapar                 │
  82.   │                                                                   │
  83.   │ REDIM Veri$(Enson)                                                │
  84.   │                                                                   │
  85.   │ Veri$(1) = "Çamlìbel"                                             │
  86.   │ Veri$(2) = "Ceyhan"                                               │
  87.   │ Veri$(3) = "çalìƒma"                                              │
  88.   │ Veri$(4) = "çalìƒdì"                                              │
  89.   │ Veri$(5) = "deneme"                                               │
  90.   │'======================= Sìralama  programì ====================== │
  91.   │ CLS : PRINT "Sìralama yapìyorum"                                  │
  92.   │ FOR I = 1 TO Enson: FOR Y = 1 TO Enson: FOR z = Nerden TO Uzunluk │
  93.   │  Veri$(Y) = LEFT$(Veri$(Y) + SPACE$(Uzunluk), Uzunluk)            │
  94.   │   Veri$(I) = LEFT$(Veri$(I) + SPACE$(Uzunluk), Uzunluk)           │
  95.   │   B = ASC(MID$(Veri$(Y), z, 1)): C = ASC(MID$(Veri$(I), z, 1))    │
  96.   │   IF B <> C THEN                                                  │
  97.   │         SELECT CASE CHR$(B)                                       │
  98.   │             CASE "ç", "Ç": B = 67.5                               │
  99.   │             CASE "º", "ª": B = 71.5                               │
  100.   │             CASE "i", "ÿ": B = 73.5                               │
  101.   │             CASE "ö", "Ö": B = 79.5                               │
  102.   │             CASE "ƒ", "₧": B = 83.5                               │
  103.   │             CASE "ü", "Ü": B = 85.5                               │
  104.   │             CASE "I": B = 73                                      │
  105.   │             CASE ELSE: B = (223 AND B)                            │
  106.   │         END SELECT                                                │
  107.   │         SELECT CASE CHR$(C)                                       │
  108.   │             CASE "ç", "Ç": C = 67.5                               │
  109.   │             CASE "º", "ª": C = 71.5                               │
  110.   │             CASE "i", "ÿ": C = 73.5                               │
  111.   │             CASE "ö", "Ö": C = 79.5                               │
  112.   │             CASE "ƒ", "₧": C = 83.5                               │
  113.   │             CASE "ü", "Ü": C = 85.5                               │
  114.   │             CASE "I": C = 73                                      │
  115.   │             CASE ELSE: C = (223 AND C)                            │
  116.   │         END SELECT                                                │
  117.   │         SELECT CASE B                                             │
  118.   │             CASE C                                                │
  119.   │             CASE ELSE                                             │
  120.   │                SELECT CASE Tercih                                 │
  121.   │                   CASE 1                                          │
  122.   │                      IF B < C THEN SWAP Veri$(I), Veri$(Y)        │
  123.   │                   CASE ELSE                                       │
  124.   │                      IF B > C THEN SWAP Veri$(I), Veri$(Y)        │
  125.   │                END SELECT                                         │
  126.   │             EXIT FOR                                              │
  127.   │         END SELECT                                                │
  128.   │   END IF                                                          │
  129.   │ NEXT: NEXT: NEXT                                                  │
  130.   │'==========================Ekrana döküm ===========================│
  131.   │  CLS : FOR I = 1 TO Enson: PRINT Veri$(I): NEXT                   │
  132.   │                                                                   │
  133.   └───────────────────────────────────────────────────────────────────┘
  134.  
  135.          ┌────────────────────────┐
  136. ─────────┤  Heceleme algoritmasì  │
  137.          └────────────────────────┘
  138.  
  139.             Kelime iƒlemci programlamaya soyunan kiƒiler için bilinmesi
  140. gereken algoritmalardan birisi de türkçe heceleme algoritmasìdìr. Türkçe
  141. heceleme yapmak için uzun uzun dil bilgisi kurallarìnì bilmek gerekmez.
  142. Sadece sesli harfleri tanìmak yeterlidir. Sesli harfler herkesin bildiºi
  143. gibi "aeìioöuü" dìr.
  144.  
  145.              Temel mantìk ƒudur. Bir kelimede ilk sesli harf bulunur, sonra
  146. ikinci sesli harf bulunur. Bunlarìn bulunduºu yer arasìnda ki mesafe heceyi
  147. belirler. ₧öyleki;
  148.  
  149.              a) Hiç sesli harf yok  : Kelimenin tamamì tek hecedir 
  150.              b) Tek sesli harf var  : Kelimenin tamamì tek hecedir
  151.              c) ÿki sesli harfin yerleri arasìnda tek karakterlik mesafe var:
  152.                     ilk hece= Kelimenin baƒì ile ilk seslinin bulunduºu yer
  153.              d) ÿki sesli harfin yerleri arasìnda çok mesafe var:
  154.                     ilk hece= Kelimenin baƒì ile ilk seslinin bulunduºu yerin
  155.                               bir fazlasì
  156.  
  157.  
  158.              Aƒaºìdaki program bu konuda bir örnektir. 
  159.   ┌────────────────────────────────────────────────────────────────────────┐
  160.   │ Sesli$ = "AaEeÿiIìÖöOoÜüUu"                                            │
  161.   │ Kelime$ = "Çekoslavakyalìlaƒtìrìmadìklarìmìzdanmìsìnìz?"               │
  162.   │                                                                        │
  163.   │ CLS                                                                    │
  164.   │ DO                                                                     │
  165.   │   GOSUB Hece                                                           │
  166.   │   Kelime$ = RIGHT$(Kelime$, LEN(Kelime$) - LEN(Hece$))                 │
  167.   │   IF LEN(Kelime$) = 0 THEN                                             │
  168.   │     PRINT Hece$                                                        │
  169.   │     EXIT DO                                                            │
  170.   │   END IF                                                               │
  171.   │   PRINT Hece$; "-";                                                    │
  172.   │ LOOP                                                                   │
  173.   │ END                                                                    │
  174.   │                                                                        │
  175.   │                                                                        │
  176.   │ Hece:                                                                  │
  177.   │ Yer1 = 0    'Birinci sesli harfin yeri                                 │
  178.   │ Yer2 = 0    'ÿkinci    "     "     "                                   │
  179.   │                                                                        │
  180.   │ FOR I = 1 TO LEN(Kelime$)                                              │
  181.   │                                                                        │
  182.   │     IF Yer1 = 0 THEN                                                   │
  183.   │        IF INSTR(Sesli$, MID$(Kelime$, I, 1)) > 0 THEN Yer1 = I         │
  184.   │     ELSE                                                               │
  185.   │                                                                        │
  186.   │       IF Yer2 = 0 THEN                                                 │
  187.   │          IF INSTR(Yer1, Sesli$, MID$(Kelime$, I, 1)) > 0 THEN Yer2 = I │
  188.   │       END IF                                                           │
  189.   │     END IF                                                             │
  190.   │ NEXT                                                                   │
  191.   │                                                                        │
  192.   │                                                                        │
  193.   │ IF Yer1 > 0 AND Yer2 > 0 THEN                                          │
  194.   │    IF Yer2 - Yer1 > 2 THEN Ara = Yer1 + 1 ELSE Ara = Yer1              │
  195.   │    Hece$ = LEFT$(Kelime$, Ara)                                         │
  196.   │ ELSE                                                                   │
  197.   │    IF Yer1 = 0 THEN Hece$ = Kelime$          'Sesli harf yok           │
  198.   │    IF Yer2 = 0 THEN Hece$ = Kelime$          'Tek sesli harf var       │
  199.   │ END IF                                                                 │
  200.   │ RETURN                                                                 │
  201.   └────────────────────────────────────────────────────────────────────────┘
  202.  
  203.          ┌────────────────────────┐
  204. ─────────┤  Binary dosya yapìsì   │
  205.          └────────────────────────┘
  206.  
  207.             Çoºu programcì için bir dosyanìn herhangi bir yerinden istenilen
  208. uzunlukta veri okunmasì veya yazìlmasì bir sorundur. Uygulamada gördüºüm bazì
  209. gereksiz program satìrlarì binary dosya yapìsìnì anlatmama neden olmuƒtur.
  210.  
  211.             Diyelim ki bir data dosyanìz var. Bu dosyanìn 1243 ncü konumundan
  212. 37 byte okumak, 2587 nci konumuna 3 byte yazmak silmek istiyorsunuz.
  213.  
  214.             Dosyayì sìralì okuma, sìralì yazma, rastgele okuma yazma gibi 
  215. türlerde açarsanìz bu iƒlemleri kolay yapamazsìnìz. Oysa binary açarsanìz           
  216. bu iƒler çok kolay örnekleyelim.
  217.  
  218.             OPEN "DENE.DAT" FOR BINARY AS 1     'Dosya açìldì
  219.             A$= SPACE$(37): GET 1, 1243, A$     '1243'den 37 byte okundu    
  220.             A$= "123": PUT 1, 2587, A$          '2587'ye 3 byte yazìldì    
  221.  
  222.             Binary dosya yapìsìnìn kolaylìklarì bununla bitmiyor. Örneºin
  223. bir dosyadaki rakamsal veri eºer tek byte sìºmìyorsa yapìlan klasik iƒlem
  224. ƒöyleydi (deºer= birinci byte deºeri*256 + ikinci byte deºeri) oysa binary
  225. yapìda bu iƒ (GET 1,,Deger%) komutu ile kendiºilinden yapìlìyor.
  226.  
  227.             Son olarak binary yapì ile database programlarìn dosya hìzlarìna
  228. basic dili ile ulaƒìlabildiºini belirtteyim. ÿlgilenen olursa bu konuya
  229. tekrar döneriz. Bu sayìda bir dosyanìn istenilen yerinden istenilen byte
  230. uzunlukta bir kìsmì silerek dosyayì tekrar aynì isimle size geri veren bir
  231. program modülü de veriyoruz.
  232.  
  233.          ┌──────────────────────────────────────┐
  234. ─────────┤  Hscplayer'in basic'e monte edilmesi │
  235.          └──────────────────────────────────────┘
  236.  
  237.              Adlib uyumlu ses kartlarìnda çalìƒmak üzere tasarlanm샠bir
  238. sürücü var. Bu sürücü (.hsc) modunda yazìlm샠ses dosyalarìnì hemen her dilde
  239. kolaylìkla dinlenebilmesi için yazìlmìƒ.
  240.                        
  241.       ┌──────────────────────────────────────────────────────────────┐
  242.       │                       HSC-Tracker V1.2                       │
  243.       │                                                              │
  244.       │               (C)1993 by Zwerg Zwack and Chicken             │
  245.       │   Soundroutine (C) 1992/93 by NEO Software Produktions GmbH  │
  246.       │  Home of HSC-Tracker: The Lycaeum +41 41-762-989 (v32b,v42b) │
  247.       │                                                              │
  248.       │                       Registered to you!                     │
  249.       └──────────────────────────────────────────────────────────────┘
  250.  
  251.              Döküman dosyasìnda bu ƒekilde bir giriƒ yapan bu mütevazi
  252. insanlarìn yaptìklarì sürücü gerçekten tam bir harika. Programlarìnìn
  253. bedava olduºunu ve bedava olmak koƒuluyla diºer programlarda da kullanìlmasì
  254. için izin verdiklerini belirten bu kiƒileri yürekten kutlarìm.
  255.  
  256.              Sürücünün herhangi bir bellek alanìna sìfìrìncì offsetinden
  257. baƒlamak üzere atìlmasì ve sonra da dinlenmek istenen dosyanìn okutulup
  258. verilerin segment ve offset adreslerinin bu sürücüye bildirilmesi gerekiyor.
  259.  
  260.              Basic programcìlarì için oldukca karmaƒìk sayìlacak bu yapì
  261. için sizlere program gönderiyorum. Bu programlar hakkìnda kìsaca bilgiler:
  262.  
  263.          ┌─────────────────────────────────┐
  264.          │  Hscdinle.Asm isimli kaynak kod │
  265.          └─────────────────────────────────┘
  266.  
  267.               Bu hscplayer ile birlikte gerekli bir kaç yordamì içeriyor.
  268. Basic programcìlarì kullanmak için; 
  269.       
  270.       Versiyon 7.1 'de
  271.  
  272.                 DEL HSCDINLE.LIB
  273.                 TASM HSCDINLE/m
  274.                 LIB QBX *INTRPT
  275.                 LIB HSCDINLE +INTRPT+HSCDINLE,;
  276.                 LINK/Q HSCDINLE.LIB,HSCDINLE.QLB,,QBXQLB;
  277.                 QBX/L HSCDINLE
  278.  
  279.       Versiyon 4.5 'de
  280.  
  281.                 DEL HSCDINLE.LIB
  282.                 TASM HSCDINLE/m
  283.                 LIB QB *INTRPT
  284.                 LIB HSCDINLE +INTRPT+HSCDINLE,;
  285.                 LINK/Q HSCDINLE.LIB,HSCDINLE.QLB,,BQLB45;
  286.                 QB/L HSCDINLE
  287.  
  288. ƒeklinde bir batch dosya çalìƒtìrmalarì gerekiyor. 
  289.  
  290.          ┌─────────────────────────────────┐
  291.          │  Hscdinle.Bas isimli kaynak kod │
  292.          └─────────────────────────────────┘
  293.               
  294.               Bu kaynak kod sadece versiyon 7.1'de çalìƒmak üzere tasarlandì.
  295. Gerekce ise gayet basit çünkü bu versiyonda "ON LOCAL ERROR", "CURDIR$" gibi
  296. geliƒmiƒ komutlar var.
  297.  
  298.               Bu programìn ayrìca .exe'si de verildi. Porgram vasìtasìyla
  299. hsc müzik dinleyebilir, bu dinlemeyi tsr olarak yapabilirsiniz. Oldukça
  300. beºeni alan bir program olduºunu belirtmeliyim.
  301.  
  302.          ┌───────────────────────────────┐
  303.          │  Hscbas.Bas isimli kaynak kod │
  304.          └───────────────────────────────┘
  305.  
  306.               Bu program ise her iki versiyonda yani versiyon 4.5'da dahil
  307. olmak üzere hsc müzik dinlemeye bir örnek olarak hazìrlandì.
  308.  
  309.               Unutulmamasì gereken bir nokta her iki program için basice
  310. "QBX /L HSCDINLE" veya "QB /L HSCDINLE" ƒeklinde baƒlamak gerekiyor.
  311.  
  312.          ┌────────────────────────────────┐
  313.          │  Odam.Hsc isimli müzik dosyasì │
  314.          └────────────────────────────────┘
  315.               
  316.               Sevgili M.Doºan ÖZDEMÿR tarafìndan yapìlmìƒ, .hsc formatìnda
  317. güzel ve türkçe bir melodi. Daha baƒka .hsc müzikler için kendisine internet 
  318. üzerinden "Dogano@Doruk.com.tr" adresi yoluyla ulaƒabilirsiniz.
  319.  
  320.                Görüƒmek üzere...
  321.  
  322. Adres:
  323.      PC World/Türkiye
  324.      PS-Gürol Demir
  325.      Eski Büyükdere cad.
  326.      Sanayi mah. Behçet sokak
  327.      No:25/B  Kat:5
  328.      80650 4.Levent / ÿSTANBUL
  329. Internet : gurold@doruk.com.tr
  330.  
  331.